Evaluación, Consideraciones y Advertencias

Similar a la tarea previa:

  • Si va a preguntar algo sobre la tarea o materia, cualquier duda, copie a todos. En caso que no lo haga yo lo haré.
  • Pregunte, sin miedo, yo decidiré si es apto o tiene sentido que responda.
  • La tarea debe ser entregada al correo jbkunst@gmail.com a más tardar el miércoles 7 junio del 2017. No se cambiará la fecha ;)! El asunto del mail debe ser tarea namber too.

Pregunta 0 (punto base)

Ejecute el siguiente código, luego comente sobre el resultado del código/experimento

library(tidyverse)
full_join(
  data_frame(x = rnorm(1e8), o1 = 1),
  data_frame(x = rnorm(1e8), o2 = 2),
  by = "x"
)

En caso que no funcione, intente con 1e7, y así hasta que funcione.

Pregunta 1

Considere la tabla iris que contiene la medición de características de 150 flores para ciertas especies de iris.

Estudie la relación entre el largo y el ancho del sépalo:

data(iris)
tbl_df(iris)
## # A tibble: 150 x 5
##    Sepal.Length Sepal.Width Petal.Length Petal.Width Species
##           <dbl>       <dbl>        <dbl>       <dbl>  <fctr>
##  1          5.1         3.5          1.4         0.2  setosa
##  2          4.9         3.0          1.4         0.2  setosa
##  3          4.7         3.2          1.3         0.2  setosa
##  4          4.6         3.1          1.5         0.2  setosa
##  5          5.0         3.6          1.4         0.2  setosa
##  6          5.4         3.9          1.7         0.4  setosa
##  7          4.6         3.4          1.4         0.3  setosa
##  8          5.0         3.4          1.5         0.2  setosa
##  9          4.4         2.9          1.4         0.2  setosa
## 10          4.9         3.1          1.5         0.1  setosa
## # ... with 140 more rows
ggplot(iris, aes(Sepal.Length, Sepal.Width)) +
  geom_point(shape = 1) 

Genere una regresión lineal explicando Sepal.Width en función de Sepal.Length y genere el resultado visual usando geom_smooth y comente lo obtenido

Pregunta 2

Con los datos anterior genere 3 regresiones lineales, una para cada tipo de especie, columna Species y además de graficarlas, comente y averigue que nombre posee efecto observado.

Pregunta 3

Considere la tabla credit que contiene 50mil casos de clientes cuyas variables fueron capturadas al momento que le otorgaron un producto de crédito y luego de cierto tiempo (digamos un año) se mide la variable bad que indica si cayó en default durante el periodo que el cliente se observó, i.e., fue un mal mal mal cliente.

credit <- read_csv("https://raw.githubusercontent.com/jbkunst/riskr/master/data/credit.csv")
glimpse(credit)
## Observations: 49,694
## Variables: 17
## $ id_client           <int> 1, 7, 9, 12, 14, 19, 22, 26, 28, 30, 32, 3...
## $ sex                 <chr> "F", "F", "F", "F", "M", "F", "M", "M", "F...
## $ marital_status      <chr> "O", "S", "S", "C", "C", "V", "C", "S", "D...
## $ age                 <int> 44, 22, 27, 32, 36, 46, 17, 20, 71, 46, 23...
## $ flag_res_phone      <chr> "N", "Y", "Y", "Y", "Y", "N", "N", "Y", "Y...
## $ area_code_res_phone <int> 31, 31, 31, 31, 31, 50, 50, 50, 31, 31, 31...
## $ payment_day         <int> 12, 12, 20, 12, 12, 12, 12, 12, 18, 8, 18,...
## $ residence_type      <chr> "P", "A", "A", "P", "P", "P", "A", "P", "A...
## $ months_in_residence <int> 12, 0, 0, 24, 120, 360, 12, 12, 96, 72, 27...
## $ months_in_the_job   <int> 48, 48, 0, 0, 36, 120, 12, 24, 12, 12, 0, ...
## $ profession_code     <int> 731, 999, 950, 165, 15, 704, 38, 39, 13, 8...
## $ flag_other_card     <chr> "N", "N", "N", "N", "N", "N", "N", "N", "N...
## $ flag_mobile_phone   <chr> "N", "N", "N", "N", "N", "N", "N", "N", "N...
## $ flag_contact_phone  <chr> "N", "N", "N", "N", "N", "N", "N", "N", "N...
## $ personal_net_income <dbl> 300, 410, 1000, 700, 1987, 520, 426, 285, ...
## $ quant_add_cards     <int> 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...
## $ bad                 <int> 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, ...
# removemos algunas columnas constantes
credit <- select(credit, -flag_other_card, -flag_mobile_phone, -flag_contact_phone)

# algunos cosas necesarias
credit <- mutate_if(credit, is.character, as.factor)
credit <- mutate(credit, bad = factor(bad))

# tamohs ready
glimpse(credit)
## Observations: 49,694
## Variables: 14
## $ id_client           <int> 1, 7, 9, 12, 14, 19, 22, 26, 28, 30, 32, 3...
## $ sex                 <fctr> F, F, F, F, M, F, M, M, F, F, F, F, F, F,...
## $ marital_status      <fctr> O, S, S, C, C, V, C, S, D, S, S, S, S, O,...
## $ age                 <int> 44, 22, 27, 32, 36, 46, 17, 20, 71, 46, 23...
## $ flag_res_phone      <fctr> N, Y, Y, Y, Y, N, N, Y, Y, Y, N, Y, Y, N,...
## $ area_code_res_phone <int> 31, 31, 31, 31, 31, 50, 50, 50, 31, 31, 31...
## $ payment_day         <int> 12, 12, 20, 12, 12, 12, 12, 12, 18, 8, 18,...
## $ residence_type      <fctr> P, A, A, P, P, P, A, P, A, P, P, P, P, P,...
## $ months_in_residence <int> 12, 0, 0, 24, 120, 360, 12, 12, 96, 72, 27...
## $ months_in_the_job   <int> 48, 48, 0, 0, 36, 120, 12, 24, 12, 12, 0, ...
## $ profession_code     <int> 731, 999, 950, 165, 15, 704, 38, 39, 13, 8...
## $ personal_net_income <dbl> 300, 410, 1000, 700, 1987, 520, 426, 285, ...
## $ quant_add_cards     <int> 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...
## $ bad                 <fctr> 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0,...

A partir de credit genere dos subconjuntos disjuntos (partición) de format aleatoria en donde cada una contenga aproximadamente 50% de los casos 1.

Para cada una de las tablas calcule la proporción de clientes que cayeron en default y luego de comparar: comente (¿Era preceible el resultado?).

Pregunta 4

Realice el siguiente experimento:

Con la primera tabla, genere un arbol2 de profundidad \(i\), y genere las predicciones tanto en la primera tabla como en la segunda y obtenga para cada una la tasa de correcta clasificación obtenida en cada tabla.

Repita lo anterior para \(i\) de 1 a 8 y vaya generando un data frame que indique el numero de iteración, las tasa de correcta clasificación de la primera tabla con la cual creó el arbol y la tasa obtenida en la segunda tabla. Algo como:

data_frame(i = 2, train = 321, test = 123)
## # A tibble: 1 x 3
##       i train  test
##   <dbl> <dbl> <dbl>
## 1     2   321   123

Sus amigos acá son for, data_frame y bind_rows

Pregunta 5

Genere un gráfico en donde abajo contenga en número de iteración y en el eje-Y la tasa de correcta clasifiación separado según la tabla de la cual proviene la tasa. Además comente.


  1. Un humilde consejo, llame a estas tablas como train (de entrenamiento) y test de testing. Jerga que se usa habitualmente en este tipo de experimentos.

  2. Con la función ctree del paquete partykit